/* eslint-disable */
// server.js
const express = require("express");
const { v4: uuidv4 } = require("uuid"); // 引入 uuid 库生成唯一 ID
const cors = require("cors");

const app = express();
const port = 3002;

// 模拟的用户数据
const users = {
  1: { name: "张三", age: 18 },
  2: { name: "李四", age: 20 },
  3: { name: "王五", age: 22 },
};

// 用于存储请求状态
const requestStatus = {};

// 生成唯一的 requestId
function generateRequestId() {
  return Math.random().toString(16).slice(2); // 生成一个随机字符串作为 requestId
}

// 启用 JSON 中间件，用于解析 JSON 格式的请求体
app.use(express.json());

// 允许跨域请求
app.use(cors());

// 用户信息接口
app.get("/users/:userId", (req, res) => {
  const { userId } = req.params;
  const user = users[userId];

  if (user) {
    res.json(user);
  } else {
    res.status(404).json({ error: "User not found" });
  }
});

// POST 接口：插入新用户
app.post("/users", (req, res) => {
  const { name, age } = req.body;

  // 检查是否提供了必要的字段
  if (!name || !age) {
    return res
      .status(400)
      .json({ error: "Missing required fields: name, age" });
  }

  // 生成唯一的 userId 和 requestId
  const userId = uuidv4(); // 使用 UUID 生成唯一的 userId
  const requestId = generateRequestId();

  // 记录请求状态
  requestStatus[requestId] = { userId, name, age, status: "pending" };

  // 立即返回 requestId
  res
    .status(202)
    .json({ message: "Request accepted", data: requestId, code: 200 });

  // 模拟延迟 5 秒后插入数据
  setTimeout(() => {
    // 插入用户数据
    users[userId] = { name, age };
    requestStatus[requestId].status = "completed";
    console.log(`User added successfully with requestId: ${requestId}`);
  }, 10000); // 延迟 5 秒
});

// GET 接口：通过 requestId 查询插入状态
app.get("/users/status/:requestId", (req, res) => {
  const { requestId } = req.params;

  if (!requestStatus[requestId]) {
    return res.status(404).json({ code: 404, message: "Request ID not found" });
  }

  const { status, userId, name, age } = requestStatus[requestId];

  if (status === "pending") {
    // 如果还在插入过程中
    res.status(200).json({ code: 200, data: null, message: "操作成功" });
  } else if (status === "completed") {
    // 如果插入完成
    res.status(200).json({
      code: 200,
      data: { userId, name, age },
      message: "操作成功",
    });
  }
});

// 启动服务器
app.listen(port, () => {
  console.log(`Server is running at http://localhost:${port}`);
});
